For many enterprise applications, finite resources must be allocated among a number of requests for such resources. In a network call routing system, for example, incoming calls must often be routed to an appropriate call center agent at one or more local or remote call centers. Each call may be routed, for example, to the call center presently offering the shortest waiting time.
Resource allocation systems typically attempt to balance the work load among resources that are available at the time the work enters the system. This approach restricts the work fulfillment only to those resources that are available when the work enters the system. In addition, this approach commits the work to the limited resource pool associated with the selected subsystem and does not respond dynamically to changes in the conditions of other remote subsystems, after the allocation decision is made. Further, in the context of a call center, when a determination is made upon receipt of a new call to route the call to a remote call center, bandwidth between the switch where the call was received and the selected remote call center is allocated to route the call to the remote call center, and the bandwidth is effectively reserved for the entire duration of the call, including the time when the call is waiting for the remote agent to become available and the time when customer is actively speaking with the agent.
A need therefore exists for methods and apparatus for allocating resources in a distributed environment that dynamically react to changing conditions. A further need exists for methods and apparatus for allocating resources in a distributed environment that do not unnecessarily allocate resources until the work is ready to be performed.